package org.apache.rocketmq.namesrv.routeinfo;

import io.netty.channel.Channel;
import org.apache.rocketmq.namesrv.NamesrvController;
import org.apache.rocketmq.remoting.ChannelEventListener;



/**
 * @课程描述:从零带你写框架系列中的课程，整个系列包含netty，xxl-job，rocketmq，nacos，sofajraft，spring，springboot，disruptor，编译器，虚拟机等等。
 * @author：陈清风扬，个人微信号：chenqingfengyangjj。
 * @date:2024/12/25
 * @方法描述：监听Broker和Namesrv构建的channel状态变化的监听器，现在我们还没有引入Broker，等引入Broker之后，我再为大家讲解这个类中每一个方法的作用
 * 也许有朋友会觉得我有点偷懒，明明还没有引入相关模块，却总是把一些相关类引入进来，引入进来之后这些类也无法发挥作用。我想跟大家解释一下，并不是因为我偷懒，不想对代码进行更精细地迭代
 * 而是我觉得有些类虽然目前用不到，但是这个类的功能和用法很容易理解，或者和当前版本代码的某个类比较像，所以我就引入进来给大家看一下，让大家提前熟悉这个类的功能
 * 就比如说当前类的功能就和NettyRemotingServer类的内部类NettyConnectManageHandler的功能比较类似，所以大家可以类比着看一下
 * 只不过NettyConnectManageHandler监听的是所有连接到Namesrv服务端channel的状态变化，而当前类的对象会在channel状态变化时进一步关注来自Broker的channel变化信息，以便对路由信息和broker信息执行相关操作
 */
public class BrokerHousekeepingService implements ChannelEventListener {


    private final NamesrvController namesrvController;


    public BrokerHousekeepingService(NamesrvController namesrvController) {
        this.namesrvController = namesrvController;
    }

    //触发连接事件时，该方法会被回调
    @Override
    public void onChannelConnect(String remoteAddr, Channel channel) {
        //源码中就是空方法
    }

    //channel断开时，该方法会被回调
    @Override
    public void onChannelClose(String remoteAddr, Channel channel) {
        //this.namesrvController.getRouteInfoManager().onChannelDestroy(channel);
    }


    //触发异常时，该方法会被回调
    @Override
    public void onChannelException(String remoteAddr, Channel channel) {
        //this.namesrvController.getRouteInfoManager().onChannelDestroy(channel);
    }

    //channel空闲时，该方法会被回调
    @Override
    public void onChannelIdle(String remoteAddr, Channel channel) {
        //this.namesrvController.getRouteInfoManager().onChannelDestroy(channel);
    }

    //这个方法在源码中并没有被回调
    @Override
    public void onChannelActive(String remoteAddr, Channel channel) {
        //源码中就是空方法
    }
}
